home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
t_os
/
book
/
src
/
doslib.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-08
|
2KB
|
90 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <msdos.cf>
#include <system.cf>
#include <status.cf>
#include <egb.h>
#include "book.h"
#include "lib.h"
#include "doslib.h"
/*
* int chdrv(int no)
* --- 指定のドライブに移動する
*
* 入力 : 移動先ドライブ (A:0, B:1, ...)
* 出力 : 現在ドライブ (A:0, B:1, ...)
*/
int chdrv(int no)
{
Registers.AX.R = 0x0E00;
Registers.DX.R = no;
calldos();
return Registers.AX.LH.L;
}
/*
* int chdir(char *name)
* --- 指定のディレクトリに移動する(指定ドライブ内)
*
* 入力 : 移動先ディレクトリのパスリスト
* ドライブ名が指定された場合は、指定ドライブのカレントディレクトリ
* は移動するが、そのドライブに移動するわけではない
* 出力 : 0 → エラーなし
* other → エラーあり
*/
int chdir(char *name)
{
Registers.AX.R = 0x3B00;
Registers.DX.R = (int)name;
Registers.DS.R = getds();
calldos();
return (Registers.Flags & 1);
}
/*
* int getdir(char *name)
* --- 現在のドライブ名からのフルパスリストを取得
*
* 入力 : なし
* 出力 : char *name にドライブ名 + ":" + ルートからのフルパスリストが返る
* なんらかのエラーにより、カレントディレクトリが取得できなかった
* 場合は、ドライブ名 + ":" + "\" のみが返される
* 関数の戻り値は 0 → エラーなし other → エラーあり
*/
int getdir(char *name)
{
int error = 0;
/* カレントディレクトリを取得 */
Registers.AX.R = 0x4700;
Registers.DX.R = 0x0000;
Registers.SI.R = (int)name+3;
Registers.DS.R = getds();
calldos();
if ((error = (Registers.Flags & 1)) != 0)
*(name+3) = '\0';
/* カレントドライブを取得 */
Registers.AX.R = 0x1900;
calldos();
/* ドライブ名に変換 */
*(name++) = 'A' + (Registers.AX.R & 0xFF);
*(name++) = ':';
*(name++) = '\\';
/* パスリストが継続する場合は、最後に \ を付加 */
if (*name != '\0')
strcat(name, "\\");
return error;
}